# -*- coding:utf-8 -*-
__author__ = 'wangjvv'
'''
date: 2020/9/23
description: 读写Excel文件
'''
import xlrd,xlwt,os,time
from xlutils import copy
from config.setting import testCasePath,testCaseFileName,testResultPath,resultFileName

# resultFileName = os.path.join(testCasePath,resultFileName)  #保存测试结果的文件名
class HandleExcel():
    def __init__(self):

        self.fileName = os.path.join(testCasePath,testCaseFileName)  #获取文件名
        self.wb = xlrd.open_workbook(self.fileName)
        now = time.strftime("%Y-%m-%d_%H-%M-%S",time.localtime()) #获取实时时间
        self.resultFileName = os.path.join(testResultPath,now+resultFileName)  #保存测试结果的文件名

        # self.resultWorkBook = xlrd.open_workbook(self.resultFileName)  #保存测试结果的文件
        self.workBook = copy.copy(self.wb)  # 创建写入的备份文件


    def getRowNumByCaseId(self,sheet_name,caseId):
        '''
        通过caseId获取行号
        '''
        table = self.wb.sheet_by_name(sheet_name) #获取页签
        col = table.col_values(6)  #获取case依赖一列的数据
        # print(col)
        return col.index(caseId)  # 返回caseId所在行的索引


    def get_sheets(self):
        '''
        获取Excel表中所有的页签对象
        '''
        sheet = self.wb.sheets()
        return sheet

    def get_all_sheetName(self):
        '''
        获取Excel表中所有的页签名
        '''
        sheetNames = self.wb.sheet_names()
        return sheetNames

    def rows(self,sheet_name):
        '''
        获取Excel表指定页签中所有的行
        '''
        table = self.wb.sheet_by_name(sheet_name)  #获取页签
        rows = table.nrows   #获取行数
        return rows
    def get_row_value(self,sheet_name,row_num):
        '''
        sheet_name: 页签名
        row_num: 行号
        获取指定页签，指定行的数据
        '''
        table = self.wb.sheet_by_name(sheet_name)  #获取页签
        row_value = table.row_values(row_num-1)  #获取整行数据
        return row_value

    def add_sheet(self,sheet_name):
        '''
        sheet_name: 添加的页签名
        向Excel表中添加页签
        '''

        workTable = self.workBook.add_sheet(sheet_name)  #添加页签
        return workTable

    def get_sheet(self,sheetIndex):
        '''获取需要写入的Excel页签对象'''

        workTable = self.workBook.get_sheet(sheetIndex)  # 获取写入的页签
        return workTable

    def write_data(self,workTable,nrow,ncol,value):
        '''
        sheetIndex: 页签对象
        nrow: 行号
        ncol: 列号
        value: 写入的值
        '''

        workTable.write(nrow,ncol,value)  #向指定页签的指定位置写入数据

    def write_result(self,workTable,nrow,value=(0,0)):
        '''
        在指定位置写入测试结果
        '''
        if isinstance(value,tuple):
            self.write_data(workTable,nrow-1,12,value[0])
            self.write_data(workTable,nrow-1,11,value[1])
        else:
            raise TypeError

    def save_result_file(self):
        '''
        保存写好的结果文件
        '''
        self.workBook.save(self.resultFileName)

    def write_row_data(self,workTable,nrow,value):
        '''
        nrow: 行号
        value: 写入的值
        将一整行数据写入到Excel中
        '''

        if isinstance(value,list):
            for i in range(0,len(value)):
                self.write_data(workTable,nrow-1,i,value[i])
        else:
            print('数据格式错误')
    def caseId(self,sheet_name,nrow):
        '''
        获取接口文档中的url地址
        '''
        return self.get_row_value(sheet_name, nrow)[0]

    def name(self, sheet_name, nrow):
        '''
        获取接口文档中的url地址
        '''
        return self.get_row_value(sheet_name, nrow)[1]

    def url(self,sheet_name,nrow):
        '''
        获取接口文档中的url地址
        '''
        return self.get_row_value(sheet_name,nrow)[2]

    def excute_flag(self,sheet_name,nrow):
        '''
        获取接口文档中的是否执行
        '''
        return self.get_row_value(sheet_name,nrow)[3]

    def method(self,sheet_name,nrow):
        '''
        获取接口文档中的请求类型
        '''
        return self.get_row_value(sheet_name,nrow)[5]

    def header(self, sheet_name, nrow):
        '''
        获取接口文档中的请求头
        '''
        return eval(self.get_row_value(sheet_name, nrow)[4])

    def caseRely(self, sheet_name, nrow):
        '''
        获取接口文档中的case依赖
        '''
        return self.get_row_value(sheet_name, nrow)[6]

    def keyRely(self, sheet_name, nrow):
        '''
        获取接口文档中的依赖的响应字段(字典的键)
        '''
        return self.get_row_value(sheet_name, nrow)[7]

    def paramRely(self, sheet_name, nrow):
        '''
        获取接口请求中需要使用依赖数据的参数名
        '''
        return self.get_row_value(sheet_name, nrow)[8]

    def request_param(self, sheet_name, nrow):
        '''
        获取接口文档中的请求参数
        '''

        params = self.get_row_value(sheet_name, nrow)[9]
        if params != 'null':
            return eval(params)
        else:
            return None

    def except_result(self, sheet_name, nrow):
        '''
        获取接口文档中的预期结果
        '''
        return self.get_row_value(sheet_name, nrow)[10]



openExcel = HandleExcel()

if __name__ == '__main__':
    # row_value = openExcel.get_row_value('resource',1)
    # table = openExcel.get_sheet('resource')
    # print(table)
    # openExcel.write_result(table,10,'test')
    # openExcel.save_result_file()
    pa = openExcel.request_param('resource',16)
    print(pa)